#ifndef Monde_h
#define Monde_h

#include <vector>
#include <ostream>

class Joueur;
class Visitor;
class Continent;
class Territoire;

/**
 * Classe Monde
 */
class Monde 
{

   friend std::ostream& operator<<(std::ostream &, const Monde &);
   
 public:
   
   ~Monde();
   void accept(Visitor * _visitor);
   Continent * addContinent(const char *);

   std::vector<Continent*> * getContinents() { return &continents; }
   const std::vector<Continent*> * getContinents() const { return &continents; }
   //const float & getWidth() const { return width; }
   //const float & getHeight() const { return height; }
   //void setHeight( float _height ){  height = _height; }
   //void setWidth( float _width ){  width = _width; }
   Territoire* getTerritoireByName(const char* _name);
   Continent* getContinentByName(const char* _name);
   int countTerritoires() const;
   int countTerritoiresJoueur(Joueur* _joueur);

   std::vector< Territoire* > * getIndexedTerritoires() { return &indexedTerritoires; }
   Territoire* getIndexedTerritoire(int _id) { return indexedTerritoires[_id]; }
   void addIndexedTerritoire(Territoire* _territoire) { indexedTerritoires.push_back(_territoire); }
   
  protected:
   
   //float width, height;
   std::vector< Continent* > continents;
   std::vector< Territoire* > indexedTerritoires;

};
#endif

